home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
276-300
/
disk_284
/
recurdir
/
mydir.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
2KB
|
112 lines
/****************************************
mydir.c
By Stephen Vermeulen 1989
(403) 282-7990
PO Box 3295, Station B
Calgary, Alberta,
CANADA, T2M 4L8
Placed in the public domain, do with as
you please.
This routine is used to recursively
decend the file system tree from our
current directory location.
It prints the full relative path (relative to the path you
supply to the CLI) to each file on a line by itself to your
CLI. This is useful as an aid in doing recursive directory
ZOOing. For example to zoo the complete contents of DF0: you
can do:
mydir df0: | zoo aI completedisk
and if you don't have pipes you can use:
mydir >temp df0:
zoo <temp aI completedisk
*****************************************/
#include <stdio.h>
#include <libraries/dos.h>
#include <workbench/workbench.h>
#include <functions.h>
#include <stdio.h>
ScanDir(lock, dirname)
ULONG lock;
char *dirname;
{
ULONG tlock;
char tdir[256], t;
struct FileInfoBlock *fib;
fib = (struct FileInfoBlock *) AllocMem((long) sizeof(struct FileInfoBlock), 0L);
if (fib)
{
if (Examine(lock, fib))
{
while (ExNext(lock, fib))
{
strcpy(tdir, dirname);
if (strlen(tdir))
{
t = tdir[strlen(tdir) - 1];
if ((t != '/') && (t != ':')) strcat(tdir, "/");
}
strcat(tdir, fib->fib_FileName);
if (fib->fib_DirEntryType > 0)
{
tlock = (ULONG) Lock(tdir, ACCESS_READ);
ScanDir(tlock, tdir); /** it was a directory so recurse **/
UnLock(tlock);
}
else
printf("%s\n", tdir);
}
}
FreeMem(fib, (long) sizeof(struct FileInfoBlock));
}
}
main(argc, argv)
int argc;
char *argv[];
{
ULONG root;
struct FileInfoBlock *fib;
fib = (struct FileInfoBlock *) AllocMem((long) sizeof(struct FileInfoBlock), 0L);
if (fib)
{
if (argc == 1)
{
root = (ULONG) Lock("", ACCESS_READ);
if (Examine(root, fib))
{
if (fib->fib_DirEntryType > 0)
ScanDir(root, argv[argc]);
}
UnLock(root);
}
else
{
while (--argc)
{
root = (ULONG) Lock(argv[argc], ACCESS_READ);
if (Examine(root, fib))
{
if (fib->fib_DirEntryType > 0)
ScanDir(root, argv[argc]);
}
UnLock(root);
}
}
FreeMem(fib, (long) sizeof(struct FileInfoBlock));
}
}